/**
 * <p>Title: MaterialBatchSvc</p>
 * <p>Description: The Interface of MaterialBatchSvc</p>
 * <p>Copyright: Shanghai Batchsight Pharmaceutical Technologies, Inc. Copyright(c) 2016</p>
 * @author Zuo Yefeng
 * @version 1.0
 * <pre>Histroy:
 *       2016-11-23  Zuo Yefeng  Create
 *</pre>
*/
package cn.jhg.account.service;

import java.sql.Timestamp;
import java.util.List;

import cn.jhg.account.entity.MaterialBatch;
import cn.jhg.account.util.ServiceResult;

/**
 * @author Yefeng
 * @version 1.0
 * @created 18-11-2016 10:53:43
 */
public interface MaterialBatchSvc {

	/**
	 * 新增原料批次
	 * @param batch	批次实体
	 * @param sid	签名id
	 * @param iuid	调用人id
	 * @return		批次id，ErrorCode
	 */
	public ServiceResult<Integer> addBatch(MaterialBatch batch, int sid, int iuid);
	// 实体包含  t_ibcp_material_batch 表中字段及 mongodb 中属性
	// prop_id 保存属性 id
	// 实际属性保存在 mongodb  mongodb.ibcp.material_batch_property中
	// 物料批次属性格式：
	// {
	//    属性名1:{value属性值, type:属性类型, uom:单位, desc:描述, cate:分类},
	//    属性名2:{value属性值, type:属性类型, uom:单位, desc:描述, cate:分类},
	//    属性名3:{value属性值, type:属性类型, uom:单位, desc:描述, cate:分类},
	//    ...
	// }


	/**
	 * 更新原料批次
	 * @param batch 批次实体
	 * @param sid	签名id
	 * @param iuid	调用人id
	 * @return		ErrorCode
	 */
	public ServiceResult<Object> updateBatch(MaterialBatch batch, int sid, int iuid);
	// 批次id不可更新

	/**
	 * 删除原料批次
	 * @param id	批次id
	 * @param sid	签名id
	 * @param iuid	调用人id
	 * @return		ErrorCode
	 */
	public ServiceResult<Object> deleteBatch(int id, int sid, int iuid);

	/**
	 * 根据id查询原料批次
	 * @param id	批次id
	 * @param iuid	调用人id
	 * @return		批次实体，ErrorCode
	 */
	public ServiceResult<MaterialBatch> queryBatchById(int id, int iuid);

	/**
	 * 查找原料批次
	 * @param batchNo	批次号	
	 * @param manuName	生产厂名称
	 * @param statId	状态代码
	 * @param iuid		调用人id
	 * @return			批次id集合，ErrorCode
	 */
	public ServiceResult<List<Integer>> findBatch(String batchNo, String manuName, int statId, int iuid);
	// 生产厂参数为名字而非生产厂ID，此处要做一个关联查询
	// t_ibcp_material_batch a inner join t_ibcp_material_supplier b on a.manu_id=b.id

	/**
	 * 查找批次详细信息
	 * @param batchNo	批次号
	 * @param manuName	生产厂名称
	 * @param statId	状态代码
	 * @param iuid		调用人id
	 * @return			批次实体集合，ErrorCode
	 */
	public ServiceResult<List<MaterialBatch>> findBatchDetail(String batchNo, String manuName, int statId, int iuid);

	/**
	 * 检查批次有效期
	 * @param timestamp	时间戳
	 * @param iuid		调用人id
	 * @return			有效期超过 timestamp 所指定时间的批次id集合 ，ErrorCode
	 */
	public ServiceResult<List<Integer>> checkExpiredDate(Timestamp timestamp, int iuid);
	// exp_date 字段表示有效期，检查时忽略本字段为空的记录

	/**
	 * 检查批次复检期
	 * @param timestamp	时间戳
	 * @param iuid		调用人id
	 * @return			复检期超过 timestamp 所指定时间的批次id集合，ErrorCode
	 */
	public ServiceResult<List<Integer>> checkInspectionDate(Timestamp timestamp, int iuid);
	// insp_date 字段表示复检期，检查时忽略本字段为空的记录
}
